◆cronで定期処理

cronというのは、設定内容に従って定期的に自動処理を行うプログラムのことですが、
おおよそのどのUNIXでもシステムに常駐して動作してます。

システムが使用、管理者が設定するcronファイルと一般ユーザーが設定できるcronファイルがあります。

この2つについて、説明していきたいと思います。


◆システムが使用するcron

システムが使用するcronの設定ファイルは、「/etc/crontab」にあります。

まず、一度中身を見てみましょう
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
*/5   *  *  *   *  root /usr/libexec/atrun
#
# rotate log files every hour, if necessary
0    *  *  *   *  root newsyslog
#
# do daily/weekly/monthly maintenance
1    3  *   *   *  root periodic daily
15    4  *   *   6  root periodic weekly
30   5  1   *   *  root periodic monthly
#
# time zone change adjustment for wall cmos clock,
# does nothing, if you have UTC cmos clock.
# See adjkerntz(8) for details.
1,31  0-5 *   *   *  root adjkerntz -a

一部下線を引いてありますが、ここがcronで使用される書式です。

定期処理を実行したい時間を「分・時間・日・月・曜日」で指定します。
そしてどのユーザー権限で実行するかを指定して、最後にコマンドが書かれています。
時間に「*」を指定すると、「どの時間でも」と指示している事になります。

この設定ごとの区切りは「スペース」か「TAB」で行います。
設定ファイルでは並びを揃える為に「TAB」を使用しています。

この中で特殊なのは「曜日」が存在する事だと思います。
「月」や「日」を指定できる他に「曜日」でも指定可能なんですね。
wdayに指定する場合、「0」と「7」が日曜日らしいです。

基本的に、1分より短い時間のcron実行は不可能です。
(出来ない事はないんですが…そこまでする必要はないと思います)


例えばすぐ下の命令ですが、これは分の指示に特殊な命令「*/5」を使用しています。
これは、「5で割り切れる分のときに実行する」と言う事です。「0・5・10・15・20・25・30…」ですね。
時間には「*」…毎時間実行です。他も「*」なので、このコマンドは5分毎に実行されている事になります。

一番下の場合、分指定が「1,31」、時間指定「0-5」です。
これは「0時から5時までの間」、「1分と31分」に実行しているという事になりますね。

ここで忘れてはならないのは、毎時間の0分に実行されている「newsyslog」でしょうか。
この設定ファイルは「/etc/newsyslog.conf」ですが、ここにてシステムログのローテーションが組まれてます。
見てみるのもいいかも知れません…編集するものではないのですが。


crontabにおいて、実際に設定を説明する方が早いと思われますので実際に設定してみます。
ここでは「ntpによる時刻合わせ」で設定した時刻合わせを、登録したいと思います。

この時「毎日午前4時に時刻合わせを実行する」と決めます。
#minute hour mday month wday who command
0    4  *  *   *  root /usr/sbin/ntpdate -s 133.100.9.2
となります。

次はちょっとひねって月曜日の午前4時に時刻合わせを実行する」と決めます。
#minute hour mday month wday who command
0    4  *  *   1  root /usr/sbin/ntpdate -s 133.100.9.2
となります。


cronは起動時に設定を読み込んで起動しているので、
システムを再起動するか、「HUP」信号を送ってやらないと設定は有効になりません。(ならない…はず(汗))
Server# ps -ax|grep cron
89 ?? Ss 0:00.60 /usr/sbin/cron
Server# kill -HUP 89


もしくは
Server# kill -HUP `cat /var/run/cron.pid`
となります。

なお、注意点として、1日より大きな時間を設定する場合、かならず「分」「時間」指定を忘れないで下さい
これを忘れると、痛い目にあいます…ええ……。


◆ユーザーが使用できるcron

(鋭気製作中



[一つ上に戻る]

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル